;This file is part of C45IDL.
;
;C45IDL is free software: you can redistribute it and/or modify
;it under the terms of the GNU Lesser General Public License as published by
;the Free Software Foundation, either version 3 of the License, or
;(at your option) any later version.
;
;C45IDL is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;GNU Lesser General Public License for more details.
;
;You should have received a copy of the GNU Lesser General Public License
;along with C45IDL.  If not, see <http://www.gnu.org/licenses/>. 

;--------------------------------------------------------------------------------------------------
; Arquivo: carregarImagem.pro
; Objetivo:
;  Armazenar os valores dos pixels da imagem (de todas as bandas) com endereco lexicografico em uma estrutura de nPixels,nBandas 
; Entradas: 
;  Arquivo de imagem .TIFF e o numero de bandas 
; Saidas:
;  Estrutura contendo os valores dos niveis de cinza em cada banda
;  Observacoes:
;   Requer adaptação dos comandos de leitura de imagem para o tipo a ser usado
; Autor: Marinalva Dias Soares e Mauricio C. M. de Paulo
; Data: 18/07/2011
; Historico de Mudanças:
;  Nenhum
;--------------------------------------------------------------------------------------------------

function carregarImagem, file
  ;if the function didn't receive a file to open, open a dialog to pick one
  if ~ n_elements(file) then begin
    file = DIALOG_PICKFILE(FILTER = '*.tif')
  endif
  ;if file doesn't exists, return 0
  if ~ FILE_TEST(file) then return, 0
  ;verifica se a imagem é TIFF
  res = QUERY_TIFF(file,inform) ;retorna 1 se for TIFF
  bandas = inform.channels ;pega o numero de bandas
  img = READ_TIFF(file,GEOTIFF=geoheader)
  if ~ n_elements(geoheader) then geoheader=0
  ;tv, img, /order, true=1
  ncolunas=inform.dimensions[0]
  totalPixelsImagem = inform.dimensions[0]*inform.dimensions[1]
  ;cria um array npixels x nbandas para armazenar a imagem: npixels é a multiplicacao das dimensoes x e y (ou seja, é o numero total de pixels)
  pixelsImagem = intarr(totalPixelsImagem, bandas) ;o endereco comeca em zero
  
  for contBanda=0,bandas-1 do begin
     ;variavel temporaria para armazenar todos os pixels de uma banda em um vetor de duas dimensoes (pixel da coluna/linha da imagem de uma banda)
     a = reform(img[contBanda,*,*])
     ;aa é uma variável para guardar o vetor acima linearizado
     aa = reform(a[*]) 
     ;pixelsImagem é um array de dimensao nPixels x nBandas (onde nPixels é o numero de colunas da imagem vezes o numero de linhas da imagem)
     ;pixelsImagem: a primeira linha armazena todos os NCs da banda 1, a segunda linha armazena todos os NCs da banda2 e assim por diante
     pixelsImagem[*,contBanda] = aa   
  endfor
  res={ncolunas: ncolunas, pixelsImagem: pixelsImagem, geoheader: geoheader}
  return, res
end